/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.latesis.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;

/**
 *
 * @author Alan - Desarrollo
 */
@Entity
@Table(name = "TBL_CHOFER")
public class ChoferBean implements Serializable {

    //marcacion actual
    private Long id;
    private String codigo;
    private String login;
    private String password;
    private String nombres;
    private String apellidoPaterno;
    private String apellidoMaterno;
    private String correo;
    private String telefono;
    private String tipoDocumento;
    private String numeroDocumento;
    private Date fechaNacimiento;
    private Date fechaIngreso;
    private String estado;
    private String licencia;
    private String direccion;
    private String foto;
    private String sexo;
    private String observacion;

    private List<MarcacionBean> marcaciones;
    private List<AlertaEnviadaBean> alertasEnviadas;
    private List<ServicioBean> servicios;   
    private List<MovilBean> moviles;
    private List<GrupoBean> grupos;
    private List<MensajeBean> mensajes;    
    private List<AsignacionServicioBean> asignaciones;    
    private MarcacionBean ultimaMarcacion;

    public ChoferBean() {
        moviles = new ArrayList<MovilBean>();
        marcaciones = new ArrayList<MarcacionBean>();
        grupos = new ArrayList<GrupoBean>();
        mensajes = new ArrayList<MensajeBean>();
        asignaciones = new ArrayList<AsignacionServicioBean>();
        alertasEnviadas = new ArrayList<AlertaEnviadaBean>();
        servicios = new ArrayList<ServicioBean>();
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return id;
    }

    @Column(name = "codigo", length = 20)
    public String getCodigo() {
        return codigo;
    }

    @Column(name = "login", length = 20)
    public String getLogin() {
        return login;
    }

    @Column(name = "password", length = 20)
    public String getPassword() {
        return password;
    }

    @Column(name = "nombres", length = 40)
    public String getNombres() {
        return nombres;
    }

    @Column(name = "apepat", length = 30)
    public String getApellidoPaterno() {
        return apellidoPaterno;
    }

    @Column(name = "apemat", length = 30)
    public String getApellidoMaterno() {
        return apellidoMaterno;
    }

    @Column(name = "correo", nullable = true, length = 30)
    public String getCorreo() {
        return correo;
    }

    @Column(name = "telefono", nullable = true, length = 15)
    public String getTelefono() {
        return telefono;
    }

    @Column(name = "tipdoc", length = 1)
    public String getTipoDocumento() {
        return tipoDocumento;
    }

    @Column(name = "numdoc", length = 11)
    public String getNumeroDocumento() {
        return numeroDocumento;
    }

    @Column(name = "fechaNacimiento")
    @Temporal(javax.persistence.TemporalType.DATE)
    public Date getFechaNacimiento() {
        return fechaNacimiento;
    }

    @Column(name = "fechaIngreso")
    @Temporal(javax.persistence.TemporalType.DATE)
    public Date getFechaIngreso() {
        return fechaIngreso;
    }

    @Column(name = "estado", length = 1)
    public String getEstado() {
        return estado;
    }

    @Column(name = "licencia", nullable = true, length = 15)
    public String getLicencia() {
        return licencia;
    }

    @Column(name = "direccion", nullable = true, length = 200)
    public String getDireccion() {
        return direccion;
    }

    @Column(name = "foto", nullable = true, length = 50)
    public String getFoto() {
        return foto;
    }

    @Column(name = "sexo", length = 1)
    public String getSexo() {
        return sexo;
    }

    @Column(name = "observacion", length = 400, nullable = true)
    public String getObservacion() {
        return observacion;
    }

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "TBL_CHOFER_MOVIL", joinColumns = {
        @JoinColumn(name = "choferId", nullable = false, updatable = false)},
            inverseJoinColumns = {
                @JoinColumn(name = "movilId", nullable = false, updatable = false)})
    public List<MovilBean> getMoviles() {
        return moviles;
    }

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "chofer")
    public List<MarcacionBean> getMarcaciones() {
        return marcaciones;
    }
    
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "chofer")
    public List<AsignacionServicioBean> getAsignaciones() {
        return asignaciones;
    }
    
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "chofer")
    public List<AlertaEnviadaBean> getAlertasEnviadas() {
        return alertasEnviadas;
    }

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "choferes")
    public List<GrupoBean> getGrupos() {
        return grupos;
    }

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "choferes")
    public List<MensajeBean> getMensajes() {
        return mensajes;
    }
    
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "chofer")
    public List<ServicioBean> getServicios() {
        return servicios;
    }
    
    //@OneToOne(fetch = FetchType.EAGER, optional = true)    
    @ManyToOne(fetch = FetchType.EAGER, optional = true)    
    @JoinColumn(name="ultimaMarcacionId")
    public MarcacionBean getUltimaMarcacion() {
        return ultimaMarcacion;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setNombres(String nombres) {
        this.nombres = nombres;
    }

    public void setApellidoPaterno(String apellidoPaterno) {
        this.apellidoPaterno = apellidoPaterno;
    }

    public void setApellidoMaterno(String apellidoMaterno) {
        this.apellidoMaterno = apellidoMaterno;
    }

    public void setCorreo(String correo) {
        this.correo = correo;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public void setTipoDocumento(String tipoDocumento) {
        this.tipoDocumento = tipoDocumento;
    }

    public void setNumeroDocumento(String numeroDocumento) {
        this.numeroDocumento = numeroDocumento;
    }

    public void setFechaNacimiento(Date fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

    public void setFechaIngreso(Date fechaIngreso) {
        this.fechaIngreso = fechaIngreso;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public void setLicencia(String licencia) {
        this.licencia = licencia;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public void setFoto(String foto) {
        this.foto = foto;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public void setObservacion(String observacion) {
        this.observacion = observacion;
    }

    public void setMoviles(List<MovilBean> moviles) {
        this.moviles = moviles;
    }

    public void setMarcaciones(List<MarcacionBean> marcaciones) {
        this.marcaciones = marcaciones;
    }

    public void setGrupos(List<GrupoBean> grupos) {
        this.grupos = grupos;
    }

    public void setMensajes(List<MensajeBean> mensajes) {
        this.mensajes = mensajes;
    }
    
    public void setAlertasEnviadas(List<AlertaEnviadaBean> alertas) {
        this.alertasEnviadas = alertas;
    }   

    public void setServicios(List<ServicioBean> servicios) {
        this.servicios = servicios;
    }    

    public void setUltimaMarcacion(MarcacionBean ultimaMarcacion) {
        this.ultimaMarcacion = ultimaMarcacion;
    }
    
    public void setAsignaciones(List<AsignacionServicioBean> asignaciones) {
        this.asignaciones = asignaciones;
    }
    

}
